package com.cvicse.crud.web;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.cvicse.crud.entity.Employee;
import com.cvicse.crud.entity.Msg;
import com.cvicse.crud.service.EmployeeService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

/**
 * 使用REST风格的URI
 *-/emp/{id}---GET------查询员工
 *-/emp--------POST-----保存员工
 *-/emp/{id}---PUT------修改员工
 *-/emp/{id}---DELETE---查询员工
 */


@Controller
public class EmployeeController {

	@Autowired
	EmployeeService employeeService;

	/**
	   * 导入jackson包才能正常工作 responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后
	   * 写入到response对象的body区，通常用来返回JSON数据或者是XML
	 * @param pn
	 * @return Msg
	 */
	@RequestMapping("/emps")
	@ResponseBody
	public Msg getEmpsWithJson(@RequestParam(value = "pn", defaultValue = "1") Integer pn) {
		// 这不是一个分页查询
		// 引入pagehelper
		// 在查询之前只需要调用pagehelper传入页码以及每页大小
		PageHelper.startPage(pn, 5);
		// startPage之后紧跟的查询就是一个分页查询
		List<Employee> emps = employeeService.getAll();
		// 使用pageInfo包装查询后的结果
		// pageInfo封装了详细的分页信息包括查询出来的数据,只需要将pageInfo交给页面就行了
		PageInfo page = new PageInfo(emps, 5);
		return Msg.success().add("pageInfo", page);
	}
	
	/**
	 * 查询员工的数据
	 */
	@RequestMapping(value="/emp/{id}",method=RequestMethod.GET)
	@ResponseBody
	public Msg getEmp(@PathVariable("id")Integer id) {
		Employee employee = employeeService.getEmp(id);
		return Msg.success().add("emp", employee);
	}
	
	/**
	 * 保存添加员工提交的表单中的数据
	 */
	@RequestMapping(value="/emp",method=RequestMethod.POST)
	@ResponseBody
	public Msg saveEmp(Employee employee) {
		employeeService.saveEmp(employee);
		return Msg.success();
	}
	
	/**
	 * 保存更新员工提交的表单的数据
	 * 如果直接发送ajax PUT请求 发送的封装内容都是null
	 * 
	 */
	@RequestMapping(value="/emp/{empId}",method=RequestMethod.PUT)
	@ResponseBody
	public Msg updateEmp(Employee employee) {
		employeeService.updateEmp(employee);
		return Msg.success();
	}
	
	/**
	 * 根据删除按钮删除员工
	 */
	@RequestMapping(value="/emp/{id}",method=RequestMethod.DELETE)
	@ResponseBody
	public Msg deleteEmpById(@PathVariable("id")Integer id) {
		employeeService.deleteEmp(id);
		return Msg.success();
	}
	
	/*
	 * @RequestMapping("/emps") public String
	 * getEmps(@RequestParam(value="pn",defaultValue="1")Integer pn,Model model) {
	 * //这不是一个分页查询 //引入pagehelper //在查询之前只需要调用pagehelper传入页码以及每页大小
	 * PageHelper.startPage(pn,5); //startPage之后紧跟的查询就是一个分页查询 List<Employee> emps =
	 * employeeService.getAll(); //使用pageInfo包装查询后的结果
	 * //pageInfo封装了详细的分页信息包括查询出来的数据,只需要将pageInfo交给页面就行了 PageInfo page = new
	 * PageInfo(emps,5); model.addAttribute("pageInfo",page); return "list"; }
	 */

}
